#include "bsp_led.h"



static LL_GPIO_InitTypeDef GPIO_InitStr;

void PIN1_IN(void){
     LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB);
    GPIO_InitStr.Pin = LL_GPIO_PIN_4;
    GPIO_InitStr.Mode = LL_GPIO_MODE_INPUT;
    GPIO_InitStr.Pull = LL_GPIO_PULL_NO;
    GPIO_InitStr.Speed = LL_GPIO_SPEED_FREQ_HIGH;
    LL_GPIO_Init(GPIOB,&GPIO_InitStr);
    
}
void PIN2_IN(void){
    LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB);
    GPIO_InitStr.Pin = LL_GPIO_PIN_5;
    GPIO_InitStr.Mode = LL_GPIO_MODE_INPUT;
    GPIO_InitStr.Pull = LL_GPIO_PULL_NO;
    GPIO_InitStr.Speed = LL_GPIO_SPEED_FREQ_HIGH;
    LL_GPIO_Init(GPIOB,&GPIO_InitStr);
}

void PIN3_IN(void){
     LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB);
    GPIO_InitStr.Pin = LL_GPIO_PIN_6;
    GPIO_InitStr.Mode = LL_GPIO_MODE_INPUT;
    GPIO_InitStr.Pull = LL_GPIO_PULL_NO;
    GPIO_InitStr.Speed = LL_GPIO_SPEED_FREQ_HIGH;
    LL_GPIO_Init(GPIOB,&GPIO_InitStr);
}

void PIN1_H(void){
   
    LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB);
    GPIO_InitStr.Pin = LL_GPIO_PIN_4;
    GPIO_InitStr.Mode = LL_GPIO_MODE_OUTPUT;
    GPIO_InitStr.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStr.Pull = LL_GPIO_PULL_NO;
    GPIO_InitStr.Speed = LL_GPIO_SPEED_FREQ_HIGH;
    LL_GPIO_Init(GPIOB,&GPIO_InitStr);
    LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_4);
}
void PIN2_H(void){
    LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB);
    GPIO_InitStr.Pin = LL_GPIO_PIN_5;
    GPIO_InitStr.Mode = LL_GPIO_MODE_OUTPUT;
    GPIO_InitStr.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStr.Pull = LL_GPIO_PULL_NO;
    GPIO_InitStr.Speed = LL_GPIO_SPEED_FREQ_HIGH;
    LL_GPIO_Init(GPIOB,&GPIO_InitStr);
    LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_5);
}

void PIN3_H(void){
    LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB);
    GPIO_InitStr.Pin = LL_GPIO_PIN_6;
    GPIO_InitStr.Mode = LL_GPIO_MODE_OUTPUT;
    GPIO_InitStr.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStr.Pull = LL_GPIO_PULL_NO;
    GPIO_InitStr.Speed = LL_GPIO_SPEED_FREQ_HIGH;
    LL_GPIO_Init(GPIOB,&GPIO_InitStr);
    LL_GPIO_SetOutputPin(GPIOB,LL_GPIO_PIN_6);
}

void PIN1_L(void){
    LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB);
    GPIO_InitStr.Pin = LL_GPIO_PIN_4;
    GPIO_InitStr.Mode = LL_GPIO_MODE_OUTPUT;
    GPIO_InitStr.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStr.Pull = LL_GPIO_PULL_NO;
    GPIO_InitStr.Speed = LL_GPIO_SPEED_FREQ_HIGH;
    LL_GPIO_Init(GPIOB,&GPIO_InitStr);
    LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_4);
}
void PIN2_L(void){
    LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB);
    GPIO_InitStr.Pin = LL_GPIO_PIN_5;
    GPIO_InitStr.Mode = LL_GPIO_MODE_OUTPUT;
    GPIO_InitStr.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStr.Pull = LL_GPIO_PULL_NO;
    GPIO_InitStr.Speed = LL_GPIO_SPEED_FREQ_HIGH;
    LL_GPIO_Init(GPIOB,&GPIO_InitStr);
    LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_5);
}

void PIN3_L(void){
    LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOB);
    GPIO_InitStr.Pin = LL_GPIO_PIN_6;
    GPIO_InitStr.Mode = LL_GPIO_MODE_OUTPUT;
    GPIO_InitStr.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStr.Pull = LL_GPIO_PULL_NO;
    GPIO_InitStr.Speed = LL_GPIO_SPEED_FREQ_HIGH;
    LL_GPIO_Init(GPIOB,&GPIO_InitStr);
    LL_GPIO_ResetOutputPin(GPIOB,LL_GPIO_PIN_6);
}


void LEDConfig(void){
    PIN1_IN();
    PIN2_IN();
    PIN3_IN();
}

void LEDDeinit(void){
    PIN1_IN();
    PIN2_IN();
    PIN3_IN();
}

void Set_AllPin_INPUT(void)
{
    PIN1_IN();
    PIN2_IN();
    PIN3_IN();
}
 

void LEDDisplay(uint8_t led,uint8_t mode){
  
    Set_AllPin_INPUT();
    switch(led){
        case 4:
            if(mode){
               PIN1_H();PIN2_L();PIN3_IN(); 
            }
            else{
               Set_AllPin_INPUT();
            }
            break;
        case 3:
            if(mode){
               PIN1_L();PIN2_H();PIN3_IN(); 
            }
            else{
               Set_AllPin_INPUT();
            }
            break;
        case 5:
            if(mode){
               PIN1_H();PIN2_IN();PIN3_L(); 
            }
            else{
               Set_AllPin_INPUT();
            }
            break;
        case 6:
            if(mode){
               PIN1_L();PIN2_IN();PIN3_H(); 
            }
            else{
               Set_AllPin_INPUT();
            }
            break;
        case 2:
            if(mode){
               PIN1_IN();PIN2_H();PIN3_L(); 
            }
            else{
               Set_AllPin_INPUT();
            }
            break;
         case 1:
            if(mode){
               PIN1_IN();PIN2_L();PIN3_H(); 
            }
            else{
               Set_AllPin_INPUT();
            }
            break;
         
        default:break;
    }
}

void Tim1_Deinit(void){
//    LL_TIM_DisableIT_UPDATE(TIM1);
//    LL_TIM_DisableCounter(TIM1);
    LL_TIM_DeInit(TIM1);
}
void Tim1_Init(void){
    LL_APB1_GRP2_EnableClock(RCC_APBENR2_TIM1EN);
    LL_TIM_InitTypeDef TIM1CountInit;
    
    TIM1CountInit.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
    TIM1CountInit.CounterMode = LL_TIM_COUNTERMODE_UP;
    TIM1CountInit.Prescaler = 2400 - 1;
    TIM1CountInit.Autoreload = 10 - 1;
    TIM1CountInit.RepetitionCounter = 0;
    
    LL_TIM_Init(TIM1,&TIM1CountInit);
    
    LL_TIM_EnableIT_UPDATE(TIM1);
    LL_TIM_EnableCounter(TIM1);
    NVIC_EnableIRQ(TIM1_BRK_UP_TRG_COM_IRQn);
    NVIC_SetPriority(TIM1_BRK_UP_TRG_COM_IRQn,5);
}






